home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / CODING / MISC / MAG08.ZIP / SPRITES.PAS < prev   
Encoding:
Pascal/Delphi Source File  |  1996-04-30  |  2.8 KB  |  124 lines

  1. Unit Sprites;
  2.  
  3. Interface
  4.  
  5. Var MinX,MaxX:Integer;
  6.     MinY,MaxY:Integer;
  7.  
  8. Procedure GetImage(x1,y1,x2,y2:Word;Var Img:Pointer;Where:Word);
  9. Procedure KillImage(Var Img:Pointer);
  10. Procedure PutImage(X,Y:Word;Var Img:Pointer;Where:Word);
  11. Procedure PutImage_C(X,Y:Integer;Var Img:Pointer;Where:Word);
  12. Procedure SaveImage(Var F:File;Img:Pointer);
  13. Procedure LoadImage(Var F:File;Var Img:Pointer);
  14.  
  15. Implementation
  16.  
  17. Uses Mode13h;
  18.  
  19. Procedure GetImage(x1,y1,x2,y2:Word;Var Img:Pointer;Where:Word);
  20. Var Dx,Dy:Word;
  21.     A,B:Word;
  22.     Segm,Offs:Word;
  23. Begin
  24.      Dx:=Abs(x2-x1)+1;
  25.      Dy:=Abs(y2-y1)+1;
  26.      GetMem(Img,Dx*Dy+4);
  27.      Segm:=Seg(Img^);
  28.      Offs:=Ofs(Img^);
  29.      Move(Dx,Mem[Segm:Offs],2);
  30.      Move(Dy,Mem[Segm:Offs+2],2);
  31.      Offs:=Offs+4;
  32.      For A:=y1 to y2 Do
  33.      For B:=x1 to x2 Do
  34.      Begin
  35.           Mem[Segm:Offs]:=GetPixel(B,A,Where);
  36.           Inc(Offs);
  37.      End;
  38. End;
  39.  
  40. Procedure KillImage(Var Img:Pointer);
  41. Var Dx,Dy:Word;
  42.     Segm,Offs:Word;
  43. Begin
  44.      Segm:=Seg(Img^);
  45.      Offs:=Ofs(Img^);
  46.      Move(Mem[Segm:Offs],Dx,2);
  47.      Move(Mem[Segm:Offs+2],Dy,2);
  48.      FreeMem(Img,Dx*Dy+4);
  49. End;
  50.  
  51. Procedure PutImage(X,Y:Word;Var Img:Pointer;Where:Word);
  52. Var Dx,Dy:Word;
  53.     A,B:Word;
  54.     Segm,Offs:Word;
  55. Begin
  56.      Segm:=Seg(Img^);
  57.      Offs:=Ofs(Img^);
  58.      Move(Mem[Segm:Offs],Dx,2);
  59.      Move(Mem[Segm:Offs+2],Dy,2);
  60.      Offs:=Offs+4;
  61.      For A:=Y To Y+Dy-1 Do
  62.      Begin
  63.           Move(Mem[Segm:Offs],Mem[Where:A*320+X],Dx);
  64.           Offs:=Offs+Dx;
  65.      End;
  66. End;
  67.  
  68. Procedure PutImage_C(X,Y:Integer;Var Img:Pointer;Where:Word);
  69. Var Dx,Dy:Word;
  70.     A,B:Word;
  71.     Segm,Offs:Word;
  72. Begin
  73.      Segm:=Seg(Img^);
  74.      Offs:=Ofs(Img^);
  75.      Move(Mem[Segm:Offs],Dx,2);
  76.      Move(Mem[Segm:Offs+2],Dy,2);
  77.      Offs:=Offs+4;
  78.      A:=Y;
  79.      While (A<=Y+DY-1) And (A<MaxY) Do
  80.      Begin
  81.           B:=X;
  82.           While (B<=X+DX-1) And (B<MaxX) Do
  83.           Begin
  84.                If (X>=MinX) And (Y>=MinY) Then
  85.                  PutPixel(B,A,Mem[Segm:Offs],Where);
  86.                Inc(Offs);
  87.                Inc(B);
  88.           End;
  89.           Inc(A);
  90.      End;
  91. End;
  92.  
  93. Procedure SaveImage(Var F:File;Img:Pointer);
  94. Var Dx,Dy:Word;
  95.     Segm,Offs:Word;
  96. Begin
  97.      Segm:=Seg(Img^);
  98.      Offs:=Ofs(Img^);
  99.      Move(Mem[Segm:Offs],Dx,2);
  100.      Move(Mem[Segm:Offs+2],Dy,2);
  101.      BlockWrite(F,Img^,Dx*Dy+4);
  102. End;
  103.  
  104. Procedure LoadImage(Var F:File;Var Img:Pointer);
  105. Var Dx,Dy:Word;
  106.     Segm,Offs:Word;
  107. Begin
  108.      BlockRead(F,Dx,2);
  109.      BlockRead(F,Dy,2);
  110.      GetMem(Img,Dx*Dy+4);
  111.      Segm:=Seg(Img^);
  112.      Offs:=Ofs(Img^);
  113.      Move(Dx,Mem[Segm:Offs],2);
  114.      Move(Dy,Mem[Segm:Offs+2],2);
  115.      Offs:=Offs+4;
  116.      BlockRead(F,Mem[Segm:Offs],Dx*Dy);
  117. End;
  118.  
  119. Begin
  120.      MinX:=0;
  121.      MaxX:=319;
  122.      MinY:=0;
  123.      MaxY:=199;
  124. End.